package code.c03_stackQueue.sqQueue;

/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/10/3 20:13
 * @package code.c03_stackQueue.sqQueue
 * @description 非循环队列的泛型类
 */

public class SqQueueClass<E> {
    //是设置最大容量是100
    final int MAX_SIZE = 100;
    // 存放队列中的元素
    private E[] data;
    // 队头，队尾指针
    private int front, rear;

    // ================================ 顺序表的基本运算 ================================

    /**
     * 判断队列是否为空
     *
     * @return
     */
    public boolean empty() {
        return front == rear;
    }

    /**
     * 进队操作
     *
     * @param e
     */
    public void push(E e) {
        // 判断是否队满
        if (rear == MAX_SIZE - 1) {
            throw new IllegalArgumentException("入队：队满");
        }
        // 入队操作
        rear++;
        data[rear] = e;
    }

    /**
     * 出队操作
     *
     * @return
     */
    public E pop() {
        if (empty()) {
            throw new IllegalArgumentException("队空");
        }
        front++;
        return data[front];
    }

    /**
     * 取队头元素
     *
     * @return
     */
    public E peek() {
        if (empty()) {
            throw new IllegalArgumentException("队空");
        }
        return (E) data[front + 1];
    }
}
